package com.study.ju.service;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;

import java.util.Arrays;

/**
 * @author 陈涛
 * @description:
 * @Date 2018/9/10 17:53
 */
@Aspect
@Component
public class AOPUtil
{
    // 配置环绕通知,使用在方法aspect()上注册的切入点
    @Around("execution(* com.study.ju.service.impl.AopTestServiceImpl.testAround(..))")
    public Object around(ProceedingJoinPoint pjp) {
        Object result = null;
        String methodName = pjp.getSignature().getName();

        try {
            //前置通知
            System.out.println("环绕通知中的前置通知方法 "+methodName+" 开始于参数 "+ Arrays.asList(pjp.getArgs()));
            //执行目标
           // result = pjp.proceed();
            //返回通知
            System.out.println("环绕通知中的返回通知方法 "+methodName+" 结果为 "+result);
        } catch (Throwable e) {
            //异常通知
            System.out.println("环绕通知中的异常通知方法 "+methodName+" 结果为 "+e);
            throw new RuntimeException(e);
        }
        //后置通知
        System.out.println("环绕通知中的后置通知方法 "+methodName+" 结束了 ");

        return result;

    }
}
